#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxn=3e3+9;
const int INF=1e18;
const int MOD=1e9+7;
const int mod=998244353;
int n,k;
map<int,map<int,bool>> t;
map<int,bool> tong;
map<int,int> rp[maxn];
int ans=0;
int p[maxn];
int f[maxn];
void dfs(int k)
{
	if(k==0) 
	{
		int res=0;
		for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) if(t[i][j]) res=(res+(p[(i*j%n)+1]*i%MOD*j%MOD)+rp[i][j])%MOD;
		if(!tong[res]) 
		{
			ans=(ans+1)%MOD;
			//for(int i=1;i<=n;i++) {for(int j=1;j<=n;j++) cout<<t[i][j]<<' ';cout<<'\n';}cout<<'\n';
		}
		tong[res]=1;
		return;
	}
	for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) 
	{
		if(t[i][j]==0) continue;
		if(i>=2&&t[i-1][j]==0)
		{
			t[i-1][j]=1;
			dfs(k-1);
			t[i-1][j]=0;
		}
		if(i<n&&t[i+1][j]==0) 
		{
			t[i+1][j]=1;
			dfs(k-1);
			t[i+1][j]=0;
		}
		if(j>=2&&t[i][j-1]==0) 
		{
			t[i][j-1]=1;
			dfs(k-1);
			t[i][j-1]=0;
		}
		if(j<n&&t[i][j+1]==0)
		{
			t[i][j+1]=1;
			dfs(k-1);
			t[i][j+1]=0;
		}
	}
}
signed main()
{
	freopen("brick.in","r",stdin);
	freopen("brick.out","w",stdout);
	ios::sync_with_stdio(false);
	cin.tie(0),cout.tie(0);
	srand(time(0));
	cin>>n>>k;
	clock_t st=clock();
	for(int i=1;i<=n;i++)
	{
		string s;
		cin>>s;
		for(int j=0;j<n;j++) t[i][j+1]=(s[j]=='#');
	}
	if(k==1)
	{
		int cnt=0;
		for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) cnt+=(t[i][j]==0&&(t[i-1][j]||t[i][j-1]||t[i+1][j]||t[i][j+1]));
		cout<<cnt<<'\n';
		return 0;
	}
	for(int i=1;i<=n;i++) p[i]=rand()%mod;
	for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) rp[i][j]=rand()%MOD;
	dfs(k);
	cout<<ans<<'\n';
	return 0;
}
